In the course of reading data from a memory, errors may be introduced such that the data read from memory may not match the original data stored in memory. Similarly, as data is written to the memory, errors may be introduced such that the data stored in memory may not match the original data intended to be written. Also, data may become corrupted while stored in a memory.
Various techniques are frequently employed for purposes of detecting such errors and correcting them if possible. For example, a memory controller may have Error Correction (or Correcting) Code (ECC) encoder logic for purposes of encoding the data before it is written into the memory cells of the memory. Such encoding frequently includes adding redundant data such as parity bits, for example, to the original write data. The encoded data when subsequently read from the memory, may be decoded by a decoder of the ECC logic of the memory controller to restore the original write data. The ECC decoder logic can frequently detect errors which may have occurred in transmission to or from the memory or while the data was stored in memory, and correcting them if not too severe. Generally, the more redundant data added to the write data by the ECC encoder logic, the more robust the error detection and correcting capabilities of the ECC decoder logic of the memory controller.
A memory typically has an associated Raw Bit Error Rate (RBER) which may be a function of a number of factors including the fabrication process used to fabricate the memory cells of the memory integrated circuits and the packing density of the memory cells, for example. Thus, as the designs of memory integrated circuits change, the associated RBER of each design generation may change as well, frequently getting worse as the packing density increases each new generation. As a result, the ECC logic of the memory controller for the new memory design is often upgraded to provide an increased level of error detection and correction, to compensate for an increase in the RBER of the new memory design.
There are various known ECC techniques for detecting and correcting data errors including for example, block codes such as Reed-Solomon error correction codes, for example, which process data on a block-by-block basis, and convolutional codes, for example, which process data on a bit-by-bit basis. In some applications such as deep space transmission of data between Earth and space probes, and compact disk recording and playback devices, for example, it is known to encode data twice using two different ECC schemes which are concatenated together as an outer ECC scheme and an inner ECC scheme, to operate in sequence on the data. Thus, an outer encoder encodes the data first using the outer ECC scheme, and an inner encoder encodes the previously encoded data a second time, using the inner ECC scheme. Conversely, an inner decoder of the inner ECC scheme decodes the concatenated encoded (twice encoded) data a first time and an outer decoder of the outer ECC scheme decodes the encoded data a second time, that is, decodes the outer ECC encoded data. By concatenating the EEC techniques, error detection and correction can be enhanced in some applications, as compared to employing just one of the ECC techniques alone.
Errors in data often occur randomly. Many concatenated error correction schemes employ interleaving to shuffle the data to spread errors which occur during decoding of the inner code. Shuffling or interleaving is usually done to ensure that the inner decoder burst of errors gets distributed amongst different outer codes.